﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once
#include "IGraphicsNode.h"

namespace gcmp
{
    /// \brief 节点集合图形节点基类
    class GCMP_GRAPHICS_NODE_INTERFACE_EXPORT IGraphicsGroupBase : public IGraphicsNode
    {
        DEFINE_CAST_DERIVED(IGraphicsGroupBase, IGraphicsNode)
    
    public:
        /// \brief 析构器
        virtual ~IGraphicsGroupBase();

    public:
        /// \brief 增加一个子节点
        /// \param subNode 子节点
        /// \return true-增加成功；false-增加失败
        virtual bool AddChild(const IGraphicsNode* subNode) = 0;
        
        /// \brief 增加一个子节点
        /// \param subNode 子节点
        /// \return true-增加成功；false-增加失败
        virtual bool AddChild(OwnerPtr<IGraphicsNode> opSubNode) = 0;
        
        /// \brief 根据索引获取子节点
        /// \param index 索引
        /// \return 获取的子节点
        virtual IGraphicsNode* GetChildFW(int index) = 0;

        /// \brief 根据索引获取子节点
        /// \param index 索引
        /// \return 获取的子节点
        virtual const IGraphicsNode* GetChild(int index) const = 0;

        /// \brief 获取子节点集合
        /// \return 子节点集合
        virtual std::vector<OwnerPtr<IGraphicsNode>>& GetChildrenFw() = 0;

        /// \brief 获取子节点集合
        /// \return 子节点集合
        virtual const std::vector<OwnerPtr<IGraphicsNode>>& GetChildren() const = 0;

        /// \brief 获取子节点数量
        /// \return 子节点数量
        virtual int GetChildrenCount()  const = 0;

        /// \brief 删除所有子节点
        /// \return 无
        virtual void DeleteAllChildren() = 0;

        /// \brief 删除指定节点
        /// \param pGraphicsNode 指定节点
        /// \return true-删除成功；false-删除失败
        virtual bool DeleteChild(const IGraphicsNode* pGraphicsNode) = 0;
    };
}


